public class code3 {
    // 有效括号序列
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return bool布尔型
     */
    public boolean isValid (String s) {
        // write code here
        // 首先将这里的 string 字符串转换为 char 类型的数组
        char[] arr = s.toCharArray();
        // 定义一个栈，用来记录存储信息
        Stack<Character> stack = new Stack<>();

        // 这里的思路是：
        // 在数组中找到对应的一半符号后，在栈中添加对应的另一半符号
        // 之后在数组的后续遍历中紧接着就与栈中的另一半符号进行比对
        // 此时如果符号相同，就说明当前的符号关系是符合题意的。

        for(int i = 0; i < arr.length; i++) {
            if(arr[i] == '(') {
                stack.push(')');
            } else if(arr[i] == '[') {
                stack.push(']');
            } else if(arr[i] == '{') {
                stack.push('}');
            }
            // 此时处理没有对称符号时的情况
            else if(stack.isEmpty() || stack.pop() != arr[i]) {
                return false;
            }
        }
        // 最终的结果还是要根据当前的栈是否为 null 来判断是否已经实现符号的完全匹配
        return stack.isEmpty();
    }
}
